// axios 基础的封装
import axios from 'axios'
// // 引入nprogress进度条
// import nprogress from 'nprogress';
// // start: 进度条开始  done: 进度条结束
// // 引入进度条的样式
// import "nprogress/nprogress.css"
import { useUserStore } from '@/stores/userStore'
import router from '@/router/index'


// import 'element-plus/es/components/message/style/css'
import { ElMessage } from 'element-plus'
// 引入样式文件 ，防止造成样式覆盖
import 'element-plus/theme-chalk/el-message.css'

// 创建axios实例
const http = axios.create({
    baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
    timeout: 5000
})

// 创建axios实例(可创建多个实例)
// const http1 = axios.create({
//     baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net1',
//     timeout: 5000
// })

// axios请求拦截器
http.interceptors.request.use(
    request => {
        // nprogress.start()
        // console.log('request11', request);

        // 1. 从pinia获取token数据
        const userStore = useUserStore()
        // 2. 按照后端的要求拼接token数据
        const token = userStore.userInfo.token
        if (token) {
            request.headers.Authorization = `Bearer ${token}`
        }

        return request
    },
    e => {
        Promise.reject(e)
    }
)

// // 请求拦截器：在发请求之前，请求拦截器可以检测到，可以在请求发出去之前做一些事情
// http.interceptors.request.use(
//     config=>{
//         //config：配置对象，对象里面有一个属性很重要，header请求头
//         // 进度条开始动
//         // console.log(store);
//         // if(store.state.detail.uuid_token){
//         //     //给请求头添加字段：和后台商量好了(userTempId)
//         //     config.headers.userTempId = store.state.detail.uuid_token
//         //     // console.log(config.headers.userTempId);
//         // }
//         //登录时候需要携带token，进行用户信息展示
//         // if(store.state.user.token){
//         //     config.headers.token = store.state.user.token
//         // }
//         return config
//     }, 
//     error => {
//         return Promise.reject(error)
//     }
// );

// axios响应式拦截器
http.interceptors.response.use(
    res => {
        //  return res.data  数据格式问题
        return res
    },
    e => {
        // 1. 从pinia获取token数据
        const userStore = useUserStore()
        // 引入路由实例
        // const router = useRouter()
        // console.log('eeee', e);
        // 错误提示
        ElMessage({
            type: 'warning',
            message: e.response.data.message
        })
        // 401 token失效处理
        // 1.清除本地用户数据
        // 2. 跳转到登录页
        if (e.response.status === 401) {
            userStore.clearUserInfo()
            router.push('/login')
        }
        
        return Promise.reject(e)
    }
)

// http.interceptors.response.use((res)=>{
//     // 成功的回调函数：服务器响应数据回来以后，响应拦截器可以检测到，可以做一些事情
//     // 进度条结束
//     // nprogress.done()
//     return res.data
// },(e)=>{
//     console.log('eeee', e);
//     // 失败的回调函数
//     // return Promise.reject(new Error( e.message || 'faile'))

//     // 错误提示
//     ElMessage({
//         type: 'warning',
//         message: e.response.data.message
//     })
//     return Promise.reject(e)
// })

export default http